-- Ejercicio 215-1:

CREATE TABLE fabricants
(
	cod_fabricant VARCHAR2(3) PRIMARY KEY,
	nom VARCHAR2(15),
	pais VARCHAR2(15),
	CONSTRAINT FABRICANTS_NOM CHECK (nom = UPPER(nom)),
	CONSTRAINT FABRICANTS_PAIS CHECK (pais = UPPER(pais))
);


CREATE TABLE tendes
(
	nif VARCHAR2(10) PRIMARY KEY,
	nom VARCHAR2(20) NOT NULL,
	adreca VARCHAR2(20),
	poblacio VARCHAR2(20),
	provincia VARCHAR2(20),
	codpostal VARCHAR2(5),
	CONSTRAINT TENDES_PROVINCIA CHECK (provincia = UPPER(provincia))
);


CREATE TABLE articles
(
	article VARCHAR2(20),
	cod_fabricant VARCHAR2(3),
	pes NUMBER(3),
	categoria VARCHAR2(10),
	preu_venda NUMBER(6,2),
	preu_cost NUMBER(6,2),
	existencies NUMBER(5),
	CONSTRAINT ARTICLES_NUMEROS CHECK (preu_venda > 0 AND preu_cost > 0 AND pes > 0),
	CONSTRAINT ARTICLES_CATEGORIA CHECK (LOWER(categoria) IN ('primera', 'segunda', 'tercera')),
	FOREIGN KEY (cod_fabricant) REFERENCES fabricants,
	PRIMARY KEY (article, cod_fabricant, pes, categoria)
);


CREATE TABLE comandes
(
	nif VARCHAR2(10),
	article VARCHAR2(20),
	cod_fabricant VARCHAR2(3),
	pes NUMBER(3),
	categoria VARCHAR2(10),
	data_comanda DATE,
	unitats_demanades NUMBER(4),
	CONSTRAINT COMANDES_UNITATS_DEMANDADES CHECK (unitats_demanades > 0),
	CONSTRAINT COMANDES_CATEGORIA CHECK (LOWER(categoria) IN ('primera', 'segunda', 'tercera')),
	CONSTRAINT COMANDEs_FK FOREIGN KEY (article, cod_fabricant, pes, categoria) REFERENCES articles ON DELETE CASCADE,
	FOREIGN KEY (nif) REFERENCES tendes,
	FOREIGN KEY (cod_fabricant) REFERENCES fabricants ON DELETE CASCADE,
	PRIMARY KEY (nif, article, cod_fabricant, pes, categoria, data_comanda)
);


CREATE TABLE vendes
(
	nif VARCHAR2(10),
	article VARCHAR2(20),
	cod_fabricant VARCHAR2(3),
	pes NUMBER(3),
	categoria VARCHAR2(10),
	data_venda DATE,
	unitats_venudes NUMBER(4),
	CONSTRAINT VENDES_UNITATS_VENUDES CHECK (unitats_venudes > 0),
	CONSTRAINT VENDES_CATEGORIA CHECK (LOWER(categoria) IN ('primera', 'segunda', 'tercera')),
	CONSTRAINT VENDES_FK FOREIGN KEY (article, cod_fabricant, pes, categoria) REFERENCES articles ON DELETE CASCADE,
	FOREIGN KEY (nif) REFERENCES tendes,
	FOREIGN KEY (cod_fabricant) REFERENCES fabricants,
	PRIMARY KEY (nif, article, cod_fabricant, pes, categoria, data_venda)
);


-- Ejercicio 215-2:

-- Ejercicio 215-3:
ALTER TABLE comandes MODIFY unitats_demanades NUMBER(6);
ALTER TABLE vendes MODIFY unitats_venudes NUMBER(6);

-- Ejercicio 215-4:
ALTER TABLE tendes ADD CONSTRAINT tendes_provincia_ck CHECK (lower(provincia) NOT LIKE '%TOLEDO%');

-- Ejercicio 215-5:
ALTER TABLE comandes ADD pvp NUMBER(6,2);
ALTER TABLE vendes ADD pvp NUMBER(6,2);